// logger/logger.go
package logger

import (
	"log"
	"path/filepath"
	"time"

	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
)

var (
	defaultLogger *Logger = NewLogger("logs", "error") // 创建默认的日志记录器，并设置默认前缀为 "error"
)

type Logger struct {
	logger *log.Logger
}

func NewLogger(baseDir, prefix string) *Logger {
	logDir := filepath.Join("logs", baseDir) // 使用传入的文件夹参数作为子目录
	logFileName := prefix + "_error.log"     // 在文件名中包含前缀
	logFilePath := filepath.Join(logDir, logFileName)

	writer, err := rotatelogs.New(
		logFilePath+".%Y%m%d", // 文件名后缀格式
		rotatelogs.WithLinkName(logFilePath),
		rotatelogs.WithRotationTime(24*time.Hour), // 日志文件轮换时间
	)

	if err != nil {
		log.Fatalf("无法初始化日志记录器: %v", err)
	}

	logger := log.New(writer, "", log.LstdFlags)
	return &Logger{logger: logger}
}

func (l *Logger) Info(args ...interface{}) {
	l.logger.Printf("[INFO] %v\n", args...)
}

func (l *Logger) Error(args ...interface{}) {
	l.logger.Printf("[ERROR] %v\n", args...)
}

// Info 记录信息日志的包级别函数
func Info(args ...interface{}) {
	defaultLogger.Info(args...)
}

// Error 记录错误日志的包级别函数
func Error(args ...interface{}) {
	defaultLogger.Error(args...)
}
